草庐IT

Android ArrayList迭代

全部标签

c++ - 为什么将十进制转换为二进制的递归方法比迭代、使用和返回字符串的方法更快?

我创建了两个接受十进制数字并返回该数字的二进制表示的函数。我选择了一种简单的方法来执行此操作,即在进行一些简单的数学运算后将1和0连接到一个字符串。我创建了一个迭代递归方法来执行此操作。然后我用老师给我的计时器课对这两种方法进行了计时。事实证明,与我的迭代方法相比,我的递归方法大约快两倍。为什么会这样?stringCConversion::decimalToBinaryIterative(intnum){stringss;while(num>0){if(num%2!=0){ss='1'+ss;}else{ss='0'+ss;}num=num/2;}returnss;}stringCCo

C++:使用 clang 编译以迭代器作为值的映射时出现巨大错误

我正在尝试将迭代器用作std::map中的值,以便我可以通过对象的id高效地查找对象或通过其有效地迭代对象深度。考虑以下代码:#include#include#include#include#include#include#includestructobject{staticintnext_id;intid;intdepth;std::map::iteratorid_it;std::multimap::iterator>::iteratordepth_it;staticstd::mapby_id;staticstd::multimap::iterator>by_depth;object

c++ - 在 C++ 中迭代结构

我在迭代结构时遇到了一些问题。根据编译器标志,结构可以有不同的定义。我想将所有结构成员设置为0。不知道有多少个成员,但保证都是数字(int,long...)请看下面的例子:#ifdefFLAG1structstr{inti1;longl1;doulbed1;};#elsifdefined(OPTION2)structstr{doubled1longl1;};#elsestructstr{inti1;};#endif我想我想做的一个很好的伪代码是:voidf(str*toZero){foreachmembermintoZerom=0}有没有办法在C++中轻松做到这一点?

c++ - (void)r++ 输入迭代器的要求

在24.2.3Inputiterators下,C++标准将输入迭代器的要求之一指定为表达式(void)r++等效于(void)++r.您也可以在cppreference看到这个.这是什么表情?这个要求有什么意义?为什么需要它?它看起来像一个C风格的强制转换,以取消r++或++r的结果,但我认为这不是它的真实面目。也就是说,稍微有点题外话,我似乎可以在类中定义一个void转换运算符。gcc和clang都编译它,但clang给出了警告:warning:conversionfunctionconverting'C'to'void'willneverbeused 最

C++:偏移到 std::vector 迭代器的正确转换是什么?

我有一个函数,它接受double的std::vector,并将它们复制到另一个vector,但在特定的偏移量处(假设有足够的空间):voidcopy_stuff(conststd::vector&data,std::vector&dest,size_tdest_offset){std::copy(data.begin(),data.end(),dest.begin()+dest_offset);}这导致C++11clang编译器-Weverything警告集中在+dest_offset部分:Implicitconversionchangessignedness:'size_t'(aka

c++ - 将迭代器取消引用到临时范围时出现非指针操作数错误

使用autoempty_line=[](auto&str){returnstr.size()==0;};我们可以这样做:autoline_range_with_first_non_empty=ranges::view::drop_while(ranges::getlines(std::cin),empty_line);autoinput1=std::stoi(*line_range_with_first_non_empty.begin());我们也可以这样做:autoline_range2=ranges::getlines(std::cin);autoiter2=ranges::fin

c++ - STL vector 、迭代器和插入 (C++)

我有一个向其传递vector迭代器的方法。在这种方法中,我想将一些元素添加到vector中,但我不确定在只有迭代器时这是否可行voidGUIComponentText::AddAttributes(vector::iteratorbegin,vector::iteratorend){for(vector::iteratori=begin;i!=end;++i){GUIComponentAttribute&attrib=*(*i);//HerearetheGUIComponentAttributeobjectsanalyzed-ifanobjectofa//specialkindappe

c++ - 像迭代器一样编写 STL

我试图学习像迭代器一样编写STL,为此我编写了一个简单的循环数组并在其中添加了一个迭代器。请查看代码底部以查看问题。templateclassRingQueue{T*_marray;int_mbegin;int_msize;public:RingQueue(){_marray=newT[N];_mbegin=0;_msize=0;}voidpush_back(constT&val){if(_msize!=N){_marray[(_mbegin+_msize)%N]=val;_msize++;}elsethrow"QueueFull";}Tpop_front(){if(_msize!=0

c++ - c++ STL迭代器的混淆使用

当我像这样使用迭代器时,//includeheaderfilesusingnamespacestd;intmain(){mapintIntMap;map::iteratorpos;pos=intIntMap.begin();intIntMap[0]=1;intIntMap[3]=5;intIntMap[4]=9;intIntMap[5]=5;//遍历coutfirst"second输出为4;但是当我这样使用迭代器时://includeheaderfileusingnamespacestd;intmain(){mapintIntMap;map::iteratorpos;intIntMap

c++ - 使用迭代器从 boost 多索引中删除项目时的一致性

我知道下面的代码对于std::vectors和更普遍的所有STL容器来说是不正确的:std::vector::iteratorit=array.begin();for(;it!=array.end();it++){...array.erase(it);...}因为删除元素后需要更新迭代器。我想知道boost多索引是否相同,例如,下面的内容是否正确:my_index::iteratorit=index.get().begin();for(;it!=index.get().end();it++){...index.erase(it);...}我想确保理解文档的以下段落:http://www